/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilisateurs.gestionnaires;

import java.util.Collection;
import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import utilisateurs.modeles.Utilisateur;

/**
 *
 * @author Fanny
 */
@Stateless
@LocalBean
public class GestionnaireUtilisateurs {

   // Ici injection de code : on n'initialise pas. L'entity manager sera créé  
    // à partir du contenu de persistence.xml  
    @PersistenceContext  
    private EntityManager em;  
  
    public void creerUtilisateursDeTest() {  
        creeUtilisateur("John", "Lennon", "jlennon", "toto");  
        creeUtilisateur("Paul", "Mac Cartney", "pmc", "toto");  
        creeUtilisateur("Ringo", "Starr", "rstarr","toto");  
        creeUtilisateur("Georges", "Harisson", "georgesH", "toto");  
    }  
  
    public Utilisateur creeUtilisateur(String prenom, String nom, String login, String mdp) {  
        Utilisateur u = new Utilisateur(prenom, nom, login, mdp);  
        em.persist(u);  
        return u;  
    }  
  
    public Collection<Utilisateur> getAllUsers() {  
        // Exécution d'une requête équivalente à un select *  
        Query q = em.createQuery("select u from Utilisateur u");  
        q.setFirstResult(0);
        q.setMaxResults(10);
        return q.getResultList();        
    }  
   

    public Utilisateur getUserFromId(final int userid) {
        return em.find(Utilisateur.class, userid);
    }

    /**
     * Permet de r&eacute;cup&eacute;rer l'instance d'un utilisateur &agrave; partir de son login
     * @param login le login de l'utilisateur &agrave; r&eacute;cup&eacute;rer
     * @return l'utilisateur correspondant
     */
    public Utilisateur getUserFromLogin(final String login) {
        Query q = em.createQuery("select u from Utilisateur u where u.login = :login");
        q.setParameter("login",login);
        return (Utilisateur) q.getSingleResult();
    }

    /**
     * Mise &agrave; jour des propri&eacute;t&eacute;s d'un utilisateur existant.
     * @param userid ID de l'utilisateur &agrave; mettre &agrave; jour
     * @param lastname nouveau nom de famille
     * @param firstname nouveau pr&eacute;nom
     */
    public void updateUser(final int userid, final String login, final String lastname, final String firstname, final String mdp) {
        Utilisateur u = getUserFromId(userid);
        u.setLogin(login);
        u.setLastname(lastname);
        u.setFirstname(firstname);
        u.setMdp(mdp);
    }

    /**
     * Permet de supprimer un utilisateur existant &agrave; partir de son ID
     * @param userid ID de l'utilisateur &agrave; supprimer
     * @return <code>true</code> si l'utilisateur a &eacute;t&eacute; trouv&eacute; et <code>false</code> sinon
     */
    public boolean removeUserFromId(final int userid) {
        Utilisateur u = getUserFromId(userid);
        em.remove(u);
        return true;
    }

    /**
     * Permet de supprimer un utilisateur existant &agrave; partir de son login
     * @param login login de l'utilisateur &agrave; supprimer
     * @return <code>true</code> si l'utilisateur a &eacute;t&eacute; trouv&eacute; et <code>false</code> sinon
     */
   public boolean removeUserFromLogin(final String login) {
        Utilisateur u = getUserFromLogin(login);
        return removeUserFromId(u.getId());
    }

    /**
     * Methode utilitaire pour afficher le nombre d'&eacute;l&eacute;ments contenus dans la liste.
     */
    public void print() {
        Query q = em.createQuery("select u from Utilisateur u");  
        System.out.print("=> " + q.getResultList().size() + " éléments chargés\n");
    }

    public void updateUser(Utilisateur user) {
        Utilisateur oldUser = getUserFromId(user.getId());
        oldUser.setId(user.getId());
        oldUser.setLogin(user.getLogin());
        oldUser.setFirstname(user.getFirstname());
        oldUser.setLastname(user.getLastname());
        oldUser.setMdp(user.getMdp());
     }
    
    public Utilisateur connexion(String login, String mdp){
        try {
            Query q = em.createQuery("select u from Utilisateur u where login=:login and mdp=:mdp");
            q.setParameter("login", login);
            q.setParameter("mdp",mdp);
            return (Utilisateur) q.getSingleResult(); 
        }
       catch (Exception e){
           return null;
       } 
        
    }
    
}
